package com.ruoyi.system.domain;

import java.util.Date;
import java.util.List;
import javax.validation.constraints.*;

import com.fasterxml.jackson.annotation.JsonFormat;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import com.ruoyi.common.annotation.Excel;
import com.ruoyi.common.annotation.Excel.ColumnType;
import com.ruoyi.common.annotation.Excel.Type;
import com.ruoyi.common.annotation.Excels;
import com.ruoyi.common.core.domain.BaseEntity;

/**
 * 用户对象 sys_user
 *
 * @author ruoyi
 */
public class SysUser extends BaseEntity {
  private static final long serialVersionUID = 1L;

  /**
   * 登录名称
   */
  @Excel(name = "账户名")
  private String loginName;
  /**
   * 用户名称
   */
  @Excel(name = "用户名")
  private String userName;

  /**
   * 手机号码
   */
  @Excel(name = "手机号码")
  private String phonenumber;

  @Excel(name = "部门名", type = Type.IMPORT)
  private String deptName;
  @Excel(name = "岗位名", cellType = ColumnType.STRING)
  private String postName;
  @Excel(name = "角色名", cellType = ColumnType.STRING)
  private String roleName;
  /**
   * 上级
   */
  @Excel(name = "上级名", type = Type.IMPORT)
  private String parentName;
  /**
   * 上级
   */
  @Excel(name = "上级电话", type = Type.IMPORT)
  private String parentPhone;

  /**
   * 用户ID
   */
  @Excel(name = "用户序号", cellType = ColumnType.NUMERIC, prompt = "用户编号",type = Type.EXPORT)
  private Long userId;

  private Long[] roleIds;
  @Excel(name = "部门编号", type = Type.EXPORT)
  private Long deptId;
  /**
   * 用户父ID
   */
  private Long parentId;

  /**
   * 角色ID
   */
  private Long roleId;



  /**
   * 用户类型
   */
  private String userType;

  /**
   * 用户邮箱
   */
//  @Excel(name = "用户邮箱")
  private String email;



  /**
   * 用户性别
   */
//  @Excel(name = "用户性别", readConverterExp = "0=男,1=女,2=未知")
  private String sex;

  /**
   * 用户头像
   */
  private String avatar;

  /**
   * 密码
   */
  private String password;

  /**
   * 盐加密
   */
  private String salt;

  /**
   * 帐号状态（0正常 1停用）
   */
//  @Excel(name = "帐号状态", readConverterExp = "0=正常,1=停用")
  private String status;

  /**
   * 删除标志（0代表存在 2代表删除）
   */
  private String delFlag;

  /**
   * 最后登陆IP
   */
  @Excel(name = "最后登陆IP", type = Type.EXPORT)
  private String loginIp;

  /**
   * 最后登陆时间
   */
  @Excel(name = "最后登陆时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss", type = Type.EXPORT)
  private Date loginDate;

  /**
   * 部门对象
   */
  @Excels({
    @Excel(name = "部门名称", targetAttr = "deptName", type = Type.EXPORT),
    @Excel(name = "部门负责人", targetAttr = "leader", type = Type.EXPORT)
  })
  private SysDept dept;

  private List<SysRole> roles;

  /**
   * 岗位组
   */
  private Long[] postIds;
  private List<SysPost> posts;
  private String userCode;

  private int age;
  private int jobLevel;
  private String emergencyName;
  private String emergencyTel;
  private String major;
  private String introducer;
  private String lastJob;
  private String law;
  @JsonFormat(pattern = "yyyy-MM-dd")
  private Date workTime;
  private String education;

  public String getParentName() {
    return parentName;
  }

  public void setParentName(String parentName) {
    this.parentName = parentName;
  }

  public String getDeptName() {
    return deptName;
  }

  public void setDeptName(String deptName) {
    this.deptName = deptName;
  }

  public String getPostName() {
    return postName;
  }

  public void setPostName(String postName) {
    this.postName = postName;
  }

  public String getRoleName() {
    return roleName;
  }

  public void setRoleName(String roleName) {
    this.roleName = roleName;
  }

  public String getParentPhone() {
    return parentPhone;
  }

  public void setParentPhone(String parentPhone) {
    this.parentPhone = parentPhone;
  }

  public int getJobLevel() {
    return jobLevel;
  }
  public void setJobLevel(int jobLevel) {
    this.jobLevel = jobLevel;
  }
  public String getEducation() {
    return education;
  }

  public void setEducation(String education) {
    this.education = education;
  }

  public int getAge() {
    return age;
  }

  public Date getWorkTime() {
    return workTime;
  }

  public void setWorkTime(Date workTime) {
    this.workTime = workTime;
  }

  public void setAge(int age) {
    this.age = age;
  }

  public String getEmergencyName() {
    return emergencyName;
  }

  public void setEmergencyName(String emergencyName) {
    this.emergencyName = emergencyName;
  }

  public String getEmergencyTel() {
    return emergencyTel;
  }

  public void setEmergencyTel(String emergencyTel) {
    this.emergencyTel = emergencyTel;
  }

  public String getMajor() {
    return major;
  }

  public void setMajor(String major) {
    this.major = major;
  }

  public String getIntroducer() {
    return introducer;
  }

  public void setIntroducer(String introducer) {
    this.introducer = introducer;
  }

  public String getLastJob() {
    return lastJob;
  }

  public void setLastJob(String lastJob) {
    this.lastJob = lastJob;
  }

  public String getLaw() {
    return law;
  }

  public void setLaw(String law) {
    this.law = law;
  }

  public String getUserCode() {
    return userCode;
  }

  public void setUserCode(String userCode) {
    this.userCode = userCode;
  }

  public SysUser() {

  }

  public SysUser(Long userId) {
    this.userId = userId;
  }

  public Long getUserId() {
    return userId;
  }

  public void setUserId(Long userId) {
    this.userId = userId;
  }

  public List<SysPost> getPosts() {
    return posts;
  }

  public void setPosts(List<SysPost> posts) {
    this.posts = posts;
  }

  public boolean isAdmin() {
    return isAdmin(this.userId);
  }

  public static boolean isAdmin(Long userId) {
    return userId != null && 1L == userId;
  }

  public Long getDeptId() {
    return deptId;
  }

  public void setDeptId(Long deptId) {
    this.deptId = deptId;
  }

  public Long getParentId() {
    return parentId;
  }

  public void setParentId(Long parentId) {
    this.parentId = parentId;
  }

  public Long getRoleId() {
    return roleId;
  }

  public void setRoleId(Long roleId) {
    this.roleId = roleId;
  }

  @NotBlank(message = "登录账号不能为空")
  @Size(min = 0, max = 30, message = "登录账号长度不能超过30个字符")
  public String getLoginName() {
    return loginName;
  }

  public void setLoginName(String loginName) {
    this.loginName = loginName;
  }

  @Size(min = 0, max = 30, message = "用户昵称长度不能超过30个字符")
  public String getUserName() {
    return userName;
  }

  public void setUserName(String userName) {
    this.userName = userName;
  }

  public String getUserType() {
    return userType;
  }

  public void setUserType(String userType) {
    this.userType = userType;
  }

  @Email(message = "邮箱格式不正确")
  @Size(min = 0, max = 50, message = "邮箱长度不能超过50个字符")
  public String getEmail() {
    return email;
  }

  public void setEmail(String email) {
    this.email = email;
  }

  @Size(min = 0, max = 11, message = "手机号码长度不能超过11个字符")
  public String getPhonenumber() {
    return phonenumber;
  }

  public void setPhonenumber(String phonenumber) {
    this.phonenumber = phonenumber;
  }

  public String getSex() {
    return sex;
  }

  public void setSex(String sex) {
    this.sex = sex;
  }

  public String getAvatar() {
    return avatar;
  }

  public void setAvatar(String avatar) {
    this.avatar = avatar;
  }

  public String getPassword() {
    return password;
  }

  public void setPassword(String password) {
    this.password = password;
  }

  public String getSalt() {
    return salt;
  }

  public void setSalt(String salt) {
    this.salt = salt;
  }

  public String getStatus() {
    return status;
  }

  public void setStatus(String status) {
    this.status = status;
  }

  public String getDelFlag() {
    return delFlag;
  }

  public void setDelFlag(String delFlag) {
    this.delFlag = delFlag;
  }

  public String getLoginIp() {
    return loginIp;
  }

  public void setLoginIp(String loginIp) {
    this.loginIp = loginIp;
  }

  public Date getLoginDate() {
    return loginDate;
  }

  public void setLoginDate(Date loginDate) {
    this.loginDate = loginDate;
  }

  public SysDept getDept() {
    if (dept == null) {
      dept = new SysDept();
    }
    return dept;
  }

  public void setDept(SysDept dept) {
    this.dept = dept;
  }

  public List<SysRole> getRoles() {
    return roles;
  }

  public void setRoles(List<SysRole> roles) {
    this.roles = roles;
  }

  public Long[] getRoleIds() {
    return roleIds;
  }

  public void setRoleIds(Long[] roleIds) {
    this.roleIds = roleIds;
  }

  public Long[] getPostIds() {
    return postIds;
  }

  public void setPostIds(Long[] postIds) {
    this.postIds = postIds;
  }

  @Override
  public String toString() {
    return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE)
      .append("userId", getUserId())
      .append("deptId", getDeptId())
      .append("loginName", getLoginName())
      .append("userName", getUserName())
      .append("userType", getUserType())
      .append("email", getEmail())
      .append("phonenumber", getPhonenumber())
      .append("sex", getSex())
      .append("avatar", getAvatar())
      .append("password", getPassword())
      .append("salt", getSalt())
      .append("status", getStatus())
      .append("delFlag", getDelFlag())
      .append("loginIp", getLoginIp())
      .append("loginDate", getLoginDate())
      .append("createBy", getCreateBy())
      .append("createTime", getCreateTime())
      .append("updateBy", getUpdateBy())
      .append("updateTime", getUpdateTime())
      .append("remark", getRemark())
      .append("dept", getDept())
      .append("roles", getRoles())
      .toString();
  }
}
